public class MyArraylist {

    public int[] arr;
    public int usedSize;//0
    //默认容量
    private static final int DEFAULT_CAPACITY = 10;

    public MyArraylist() {
        this.arr = new int[DEFAULT_CAPACITY];
        this.usedSize = 0;
    }

    /**
     * 打印顺序表:
     * 根据usedSize判断即可
     */
    public void display() {
        if(usedSize==0){
            System.out.println("数组为空");
        }
for(int i=0;i<usedSize;i++){
    System.out.println(arr[i]);
}
    }


    // 新增元素,默认在数组最后新增
    public void add(int data) {
        if (usedSize == arr.length) {
            resize();
        }
        arr[usedSize] = data;
        usedSize++;
    }

    private void resize() {
        int[] newArr = new int[(int) ((int) arr.length * 1.5)];
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];
        }
        arr = newArr;
    }

    /**
     * 判断当前的顺序表是不是满的！
     *
     * @return true:满   false代表空
     */
    public boolean isFull() {
        return usedSize == arr.length;

    }




    // 在 pos 位置新增元素
    public void add(int pos, int data) {
        if (usedSize == arr.length) {
            resize();
        }
        if (pos < 0 || pos > usedSize) {
            throw new IndexOutOfBoundsException("Index out of bound");

        }
        for (int i = usedSize - 1; i >= pos; i--) {
            arr[i + 1] = arr[i];
        }
        arr[pos] = data;
        usedSize++;
    }

    // 判定是否包含某个元素
    public boolean contains(int toFind) {
for(int i=0;i<usedSize;i++) {
    if (arr[i] == toFind) {
        return true;
    }

}
return false;
    }

    // 查找某个元素对应的位置
    public int indexOf(int toFind) {
for(int i=0;i<usedSize;i++){
    if(arr[i]==toFind){
        return i;
    }
}
        return -1;
    }

    // 获取 pos 位置的元素
    public int get(int pos) {
        if (pos < 0 || pos >= usedSize) {
            throw new IndexOutOfBoundsException("下标越界" + pos);
        }
        return arr[pos];
    }

    private boolean isEmpty() {
        return usedSize == 0;
    }

    // 给 pos 位置的元素设为【更新为】 value
    public void set(int pos, int value) {
        if(pos<0||pos>usedSize){
            throw new IndexOutOfBoundsException("yuejie");
        }
arr[pos]=value;

    }

    /**
     * 删除第一次出现的关键字key
     *
     * @param key
     */
    public int remove(int key) {
if(key<0||key>=usedSize){
    throw new IndexOutOfBoundsException("越界");
}

int result=arr[key];
for(int i=key;i<usedSize-1;i++){
    arr[i]=arr[i+1];
}
usedSize--;
return result;
   }

    // 获取顺序表长度
    public int usedSize() {
        return usedSize;
    }

    // 清空顺序表
    public void clear() {
usedSize=0;
    }
}